import UIKit

// 直接赋值
var str: String = "Hello, playground"
// 直接赋值为空字符串
str = ""
// 通过构造方法来进行 str 变量的构造
str = String()                               // 构造空字符串 ""
str = String("Hello")                        // 通过字符串构造 "Hello"
str = String(666)                            // 通过整型数据构造 "666"
str = String(6.66)                           // 通过浮点型数据构造 "6.66"
str = String("a")                            // 通过字符构造 "a"
str = String(false)                          // 通过 Bool 值构造 "false"
str = String(describing: (1, 1.0, true))     // 通过元组构造 "(1, 1.0, true)"
str = String(describing: [1, 2, 3])          // 通过列表构造 "[1, 2, 3]"
str = String(format: "我是%@", "少爷")        //  通过格式化字符串构造 "我是少爷"

str = String(describing: Int.self)           // 通过类型来构造自字符串 "Int"

// 整型、浮点型数据使用构造方法来实现互相转换
var a = Int(1.05)
var b = Float(a)

// 字符串的组合
var c1 = "Hello"
var c2 = "World"
var c3 = c1 + " " + c2  // "Hello World" 注意中间拼接了空格

// 使用 \() 进行字符串插值
var d = "Hello \(123)"       // "Hello 123"
var d2 = "Hello \(c2)"       // "Hello World"
var d3 = "Hello \(1 + 2)"    // "Hello3"

MemoryLayout<String>.size   // 16 字节获取 String 类型占用的内存空间

// 创建一个字符
var e: Character = "a"
// 创建字符数组
var e2: [Character] = ["H", "e", "l", "l", "o"]
// 通过字符数组来构造字符串 "Hello"
var e3 = String(e2)
// 通过否早方法来创建字符类型变量
var e4 = Character("a")

// 进行 for-in 遍历
let name = "China"
for character in name {
    print(character)
}

// 判断字符串是否为空字符串
var obj1 = ""
if obj1.isEmpty {
    print("字符串为空字符串")
}

// 获取字符串中的字符个数，判断是否为空字符串
if obj1.count == 0 {
    print("字符串为空字符串")
}

var com1 = "30a"
var com2 = "31a"
// 比较两个字符串是否相等，只有两个字符串中所有位置的字符都相等时，才为相等的字符串
if com1 == com2 {
    print("com1 和 com2 相等")
}
// 比较两个字符串的大小
if com1 < com2 {
    print("com1 比 com2 小")
}

var string = "Hello-Swift"
// 获取字符串的起始下标 String.index 类型
var startIndex = string.startIndex
// 获取字符串的结束下标 String.index 类型
var endIndex = string.endIndex

// 获取某个下标后一个下标对应的字符 char = "e"
var char = string[string.index(after: startIndex)]
// 获取某个下标前一个下边对应的字符 char2 = "t"
var char2 = string[string.index(before: string.endIndex)]
// 通过范围获取字符串中的一个子串 Hello
var subString = string[startIndex ... string.index(startIndex, offsetBy: 4)]
var subString2 = string[string.index(endIndex, offsetBy: -5) ..< endIndex]
// 获取某个子串在父串的范围
var range = string.range(of: "Hello")
// 追加一个字符，此时 string = "Hello-Swift!"
string.append(Character("!"))
// 追加字符串操作，此时 string = "Hello-Swift! Hello-World"
string.append(" Hello-World")
// 在指定位置插入一个字符，此时 string = "Hello-Swift!~ Hello-World"
string.insert("~", at: string.index(startIndex, offsetBy: 12))
// 在指定位置插入一组字符，此时 string = "Hello-Swift!~~~~ Hello-World"
string.insert(contentsOf: ["~", "~", "~"], at: string.index(string.startIndex, offsetBy: 12))
// 在指定范围替换一个字符串，此时 string = "Hi-Swift!~~~ Hello-World"
string.replaceSubrange(string.startIndex ... string.index(string.startIndex, offsetBy: 4), with: "Hi")
// 在置顶位置删除一个字符，此时 string = "Hi-Swift!~~~~ Hello-Worl"
string.remove(at: string.index(before: string.endIndex))
// 删除指定范围的字符，此时 string = "Swift!~~~~ Hello-Worl"
string.removeSubrange(string.startIndex ... string.index(string.startIndex, offsetBy: 2))
// 删除所有字符，此时 string = ""
string.removeAll()

var string2 = "My name is Eric"
// 全部转换为大写
string2 = string2.uppercased()
// 全部转换为小写
string2 = string2.lowercased()

// 检查字符串是否有 My 前缀
string2.hasPrefix("My")
// 检查字符串是否有 eric 后缀
string2.hasSuffix("eric")
